import {
  CascaderProps,
  DatePickerProps,
  FormItemProps,
  FormProps,
  InputNumberProps,
  InputProps,
  RadioGroupProps,
  SelectProps
} from 'antd'
import { PasswordProps, SearchProps, TextAreaProps } from 'antd/es/input'
import { ActionDesc, PagesKey } from '@/global/constant'
import { RangePickerProps } from 'antd/es/date-picker'

export enum FormType {
  Input,
  InputNumber,
  Password,
  TextArea,
  Search,
  Select,
  Radio,
  DatePicker,
  RangePicker,
  Cascader,
  Custom
}

export interface IMyFormItemProps extends FormItemProps {
  type: FormType
  prop: string
  name?: string
  // 输入框
  input?: InputProps
  // 数字输入框
  inputNumber?: InputNumberProps
  // 密码输入框
  password?: PasswordProps
  // 多行输入框
  textArea?: TextAreaProps
  // 搜素输入框
  search?: SearchProps
  // 下拉框
  select?: {
    baseProps?: SelectProps
    options?: IOptions[]
  }
  // 单选框组
  radio?: {
    baseProps?: RadioGroupProps
    options?: IOptions[]
  }
  // 单个日期选择
  date_picker?: DatePickerProps
  // 范围日期选择
  range_picker?: RangePickerProps
  // 级联选择器
  cascader?: {
    baseProps?: CascaderProps & { placeholder?: string }
    options?: CascaderOption[]
  }
  // 自定义内容的标识符
  customkey?: string
}

// select的子配置项
export interface IOptions {
  value: string | number
  content?: any
  label?: any
}

// 级联选择器的子配置项
export interface CascaderOption {
  value: string
  label: string
  children?: CascaderOption[]
}

// 布局，主要是针对表单一行占多少个的问题
export interface IMyLayoutProps {
  span: number
}

export interface IMyFormProps {
  // 标识符
  pageKey?: PagesKey
  desc: ActionDesc
  // 跟Col有关
  layout?: IMyLayoutProps
  // 跟Form有关
  formConfig: FormProps
  // 跟Form.Item有关
  itemsConfig: IMyFormItemProps[]
}

// 重构itemsConfig并做select的限制
